package com.itbbs.redis.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.JedisPoolConfig;

import javax.annotation.Resource;
import java.util.HashSet;
import java.util.Set;

/**
 * @author liuyingao
 * @Describe:[]
 * @title JedisClusterConfig
 * @create 2021-05-30 17:36
 * @desc JedisClusterConfig
 **/
@Configuration
public class JedisClusterConfig {


    @Resource
    private RedisProperties redisProperties;


    // 写操作
    @Bean(name = "getWriteJedisCluster")
    public JedisCluster getWriteJedisCluster() {
        String[] serverArray = redisProperties.getWriteHostAndProt().split(",");//获取服务器数组(这里要相信自己的输入，所以没有考虑空指针问题)
        Set<HostAndPort> nodes = new HashSet<>();

        for (String ipPort : serverArray) {
            String[] ipPortPair = ipPort.split(":");
            nodes.add(new HostAndPort(ipPortPair[0].trim(), Integer.parseInt(ipPortPair[1].trim())));
        }
        // Jedis连接池配置
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        // 最大空闲连接数, 默认8个
        jedisPoolConfig.setMaxIdle(redisProperties.getMaxIdle());
        // 最大连接数, 默认8个
        jedisPoolConfig.setMaxTotal(redisProperties.getMaxTotal());
        // 最小空闲连接数, 默认0
        jedisPoolConfig.setMinIdle(redisProperties.getMinIdle());
        // 获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,  默认-1
        jedisPoolConfig.setMaxWaitMillis(redisProperties.getMaxWaitMillis()); // 设置2秒
        // 对拿到的connection进行validateObject校验
        jedisPoolConfig.setTestOnBorrow(redisProperties.isTestOnBorrow());
        JedisCluster jedisCluster = new JedisCluster(nodes,6000,2000,100,redisProperties.getAuth(),jedisPoolConfig);
        return jedisCluster;


    }

    // 读操作
    @Bean(name = "getReadJedisCluster")
    public JedisCluster getReadJedisCluster() {
        String[] serverArray = redisProperties.getReadHostAndProt().split(",");//获取服务器数组(这里要相信自己的输入，所以没有考虑空指针问题)
        Set<HostAndPort> nodes = new HashSet<>();
        for (String ipPort : serverArray) {
            String[] ipPortPair = ipPort.split(":");
            nodes.add(new HostAndPort(ipPortPair[0].trim(), Integer.parseInt(ipPortPair[1].trim())));
        }
        // Jedis连接池配置
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        // 最大空闲连接数, 默认8个
        jedisPoolConfig.setMaxIdle(redisProperties.getMaxIdle());
        // 最大连接数, 默认8个
        jedisPoolConfig.setMaxTotal(redisProperties.getMaxTotal());
        //最小空闲连接数, 默认0
        jedisPoolConfig.setMinIdle(redisProperties.getMinIdle());
        // 获取连接时的最大等待毫秒数(如果设置为阻塞时BlockWhenExhausted),如果超时就抛异常, 小于零:阻塞不确定的时间,  默认-1
        jedisPoolConfig.setMaxWaitMillis(redisProperties.getMaxWaitMillis()); // 设置2秒
        //对拿到的connection进行validateObject校验
        jedisPoolConfig.setTestOnBorrow(redisProperties.isTestOnBorrow());
        JedisCluster jedisCluster = new JedisCluster(nodes,6000,2000,100,redisProperties.getAuth(),jedisPoolConfig);
        return jedisCluster;

    }

}
